swadhinbiswas feat: OpenCodeHub v1.1.0 - Enterprise Features & Storage Adapters · 2/15/2026
719a1cb
43 lines · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

import type { APIRoute } from "astro";
import { getDatabase, schema } from "@/db";
import { getUserFromRequest } from "@/lib/auth";
import { success, badRequest, notFound, unauthorized, serverError } from "@/lib/api";
import { eq, desc } from "drizzle-orm";
import { projects, projectColumns } from "@/db/schema/projects";
import { logger } from "@/lib/logger";
import { withErrorHandler } from "@/lib/errors";

export const POST: APIRoute = withErrorHandler(async ({ request, params }) => {
    const { id } = params; // project id
    if (!id) return badRequest("Project ID required");

    const user = await getUserFromRequest(request);
    if (!user) return unauthorized();

    const body = await request.json();
    const { name } = body;

    if (!name) return badRequest("Column name is required");

    const db = getDatabase();

    // Get max order
    const existing = await (db as any).select({ order: projectColumns.order })
        .from(projectColumns)
        .where(eq(projectColumns.projectId, id))
        .orderBy(desc(projectColumns.order))
        .limit(1);

    const nextOrder = (existing[0]?.order || 0) + 1;

    const [newColumn] = await (db as any).insert(projectColumns).values({
        id: crypto.randomUUID(),
        projectId: id,
        name,
        order: nextOrder,
    }).returning();

    return success(newColumn);
});